package com.budwk.app.sys.services;

import com.budwk.app.sys.dto.SysUnitUpdateDTO;
import com.budwk.app.sys.models.Sys_unit;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.starter.common.page.Pagination;
import com.budwk.starter.common.result.IResultCode;
import com.budwk.starter.database.service.BaseService;

import java.util.List;

/**
 * @author wizzer@qq.com
 */
public interface SysUnitService extends BaseService<Sys_unit> {
    /**
     * 保存单位
     *
     * @param unit 单位对象
     */
    void save(Sys_unit unit);

    /**
     * 修改单位
     *
     * @param unit      单位对象
     * @param leaders   本单位领导
     * @param highers   上级主管领导
     * @param assigners 上级分管领导
     */
    void update(Sys_unit unit, String[] leaders, String[] highers, String[] assigners);

    /**
     * 级联删除单位及单位下用户
     *
     * @param unit 单位对象
     */
    void deleteAndChild(Sys_unit unit);

    /**
     * 查询本级及下一级单位用户
     *
     * @param username 用户昵称
     * @param unitId   单位ID
     * @return
     */
    Pagination searchUser(String username, String unitId);

    /**
     * 获取单位所在分公司/总公司
     * @param unitId
     * @return
     */
    String getMasterCompanyId(String unitId);

    /**
     * 获取单位所在分公司/总公司
     * @param unitId
     * @return
     */
    String getMasterCompanyPath(String unitId);

    /**
     * 获取单位所在分公司/总公司
     *
     * @param unitId 单位ID
     * @return
     */
    Sys_unit getMasterCompany(String unitId);

    /**
     * 获取公司直属部门及子部门(不含分公司/分公司部门)
     * @param parentId
     * @return
     */
    List<String> getSubUnitIds(String parentId);

    void createCompanyExhaustive(SysUnitUpdateDTO unit, String userId);

    void updateCompanyExhaustive(SysUnitUpdateDTO unit, String userId);

    /**
     * 通过5级区域获取单位信息
     *
     * @param sysUser
     * @return
     */
    Sys_unit getUnitInfoByArea(Sys_user sysUser);

    /**
     * 获取单位列表信息（后台管理系统）
     * @param bean
     * @param pageNo
     * @param pageSize
     * @param pageOrderName
     * @param pageOrderBy
     * @return
     */
    Pagination listUnitForAdmin(SysUnitUpdateDTO bean, int pageNo, int pageSize, String pageOrderName, String pageOrderBy);

    /**
     * 修改单位信息
     * @param unit
     */
    String updateUnitForAdmin(SysUnitUpdateDTO unit);

    /**
     * 删除单位信息
     * @param id
     * @return
     */
    String deleteForAdmin(String id);

    /**
     * 查询区域信息
     * @param bean
     * @return
     */
    List<String> queryCommunityList(SysUnitUpdateDTO bean);

    /**
     * 批量修改单位信息
     *
     * @param ids
     * @param bean
     * @return
     */
    Integer batchUpdateForAdmin(List<String> ids, SysUnitUpdateDTO bean);

    void unitDataClean(String level);

    void unitDataCleanPath(String level);

    void unitDataCleanHasChild(String level);

    Sys_unit queryUnitTree(String unitId, List<Sys_user> allUnitUser);
}
